// function deepclone (obj) {
//   let res = Array.isArray(obj) ? [] : {}
//   for (let [k, v] of Object.entries(obj)) {
//     res[k] = typeof v == "object" ? deepclone(v) : v
//   }
//   return res
// }
// let result = deepclone(cc)

// function deepClone (obj) {
//   let res = Array.isArray(obj) ? [] : {}
//   for (let [key, value] of Object.entries(obj)) {
//     res[key] = typeof value == 'object' ? deepClone(v) : v
//   }
//   return res
// }



// function copy (obj) {
//   return new Promise(resolve => {
//     let { port1, port2 } = new MessageChannel()
//     port1.postMessage(obj)
//     port2.onmessage = (msg) => {
//       resolve(msg.data)
//     }
//   })
// }


// let obj = {
//   name: 'lily',
//   say: {
//     name: 'chen'
//   }
// }
// function Copy (obj) {
//   let obj1 = Object.prototype.toString.call(obj) == 'object' ? {} : []
//   console.log(' Object.constructor.toString.call(obj) ', Object.prototype.toString.call(obj));

//   for (let [key, value] of Object.entries(obj)) {

//     if (typeof obj[key] === 'object') {
//       obj1[key] = Copy(value)
//     } else {
//       obj1[key] = value
//     }
//   }

//   return obj1
// }


// console.log('Copy', Copy(obj));



// // 二分查找
// /**
//  *
//  * @param {number[]} arr
//  * @param {number } target
//  * @returns
//  */
// function binarySearch (arr, target) {
//   if (!(Object.prototype.toString.call(arr) === "[object Array]")) {
//     console.log('不是数组！');
//   }
//   let left = 0;
//   let right = arr.length - 1
//   while (left <= right) {
//     let mid = Math.floor((left + right) / 2)
//     if (arr[mid] === target) return mid
//     if (target > arr[mid]) {
//       left = mid + 1
//     } else {
//       right = mid - 1
//     }

//   }
//   return -1
// }



// // 测试用例
// const sortedArr = [1, 3, 5, 7, 9, 11, 15, 20];
// console.log(binarySearch(222, 7)); //
// console.log(binarySearch(sortedArr, 4)); //
// console.log(binarySearch(sortedArr, 0)); //
// console.log(binarySearch(sortedArr, 9)); //



// 防抖代码
// function debounce (fn, delay) {
//   let timer = null
//   return function () {
//     clearTimeout(timer)
//     timer = setTimeout(() => {
//       fn.apply(this, arguments)
//     }, delay);
//   }
// }

// let debounceFn = debounce(() => {
//   console.log('打印一次就好！');
// }, 1000)
// debounceFn()
// debounceFn()
// debounceFn()
// debounceFn()


// let arr = [1, 2, 4, 3, 3, 3, 42, 2, 2, 8]
// function bubbleSort (arr) {
//   let temp;
//   for (let i = 0; i < arr.length - 1; i++) {
//     for (let j = 0; j < arr.length - 1 - i; j++) {
//       if (arr[j + 1] < arr[j]) {
//         // 记得用j去判断
//         temp = arr[j]
//         arr[j] = arr[j + 1]
//         arr[j + 1] = temp
//       }
//     }
//   }
//   console.log(arr);
//   return arr
// }

// bubbleSort(arr)



// function myNew (fn, ...args) {
//   let obj = {}
//   Object.setPrototypeOf(obj, fn.prototype)
//   let result = fn.apply(obj, args)
//   return result instanceof Object ? result : obj
// }

// function Person (name) {
//   this.name = name

// }

// let Person1 = myNew(Person, 'lily')
// console.log(Person1.name);

// function debounce (fn, delay) {
//   let timer;
//   return function () {
//     clearTimeout(timer)
//     timer = setTimeout(() => {
//       fn.apply(this, arguments)
//     }, delay);
//   }
// }


// function precisionFn (a, b, persiconNum = 10) {
//   // 放大的倍数
//   let result = Math.pow(10, persiconNum)
//   return Math.round((a + b) * result) / result
// }

// let result = precisionFn(0.11, 0.2111)
// console.log(result);
// let a = "11"
// let b = "22"
// console.log(a.concat(b));


// Function.prototype.myCall = function (ctx) {
//   if (typeof this != 'function') {
//     console.log('type error!!');
//   }
//   const uniqueProps = Symbol()
//   ctx[uniqueProps] = this
//   const t = [...arguments].slice(1)
//   let result = ctx[uniqueProps](...t)
//   delete ctx[uniqueProps]
//   return result
// }
// function fn (a, b) {
//   console.log(a, b);
//   console.log(this);

// }

// fn.myCall({ name: 'lily' }, 12, 132)


// function sleep (delay) {
//   return new Promise(resolve =>
//     setTimeout(resolve, delay)
//   )
// }

// sleep(1000).then(() => {
//   console.log('111');
// })


let arr = [1, 3, 4, 10, 99]
function getMax (arr) {
  let max = Math.max(...arr)
  const noMax = arr.filter((item) => {
    return item !== max
  })
  let max2 = Math.max(...noMax)
  return max + max2
}

console.log(getMax(arr));
